import { pcSave } from "@/api";
import { getCurrentMealType } from "./mealTypeRulesUtils";
import store from "@/store";
import dayjs from "dayjs";
import { generateSerialNumber } from "@/utils/util";

/** 点餐下单逻辑 */
export const placeAnOrder = async ({
  memberInfo = {}, // 会员信息
  payType = "1", // 支付方式（1余额2微信3支付宝4现金5套餐6刷卡(注意不是会员卡)7货到付款）
  specialParam = {}, // 特殊参数
}) => {
  if (!specialParam || typeof specialParam !== "object") specialParam = {};

  try {
    // 商家信息
    const { businessId, businessName } = store.getters.businessInfo;
    // 其他待支付商品信息
    const productDetails = store.getters.currShoppingCardInfo;
    // 订单列表
    const orderItems = productDetails.productList.map((v) => {
      return {
        foodName: v.name,
        foodNum: v.count,
        price: v.price,
        orderPackageItemId: v.foodTypeId,
        buffetOrderItemId: v.foodTypeId,
      };
    });
    const pam = {
      customerInformationName: memberInfo?.customerName,
      phone: memberInfo?.customerPhone,
      businessName: businessName,
      diningStyle: productDetails?.isPack ? 3 : 2, // TODO 暂时写死	就餐方式(1送餐2堂食3自提)
      mealTime: dayjs().add(1, "hour").format("YYYY-MM-DD HH:mm:ss"), //TODO	用餐时间 当前消费机场景下无
      mealtype: "", // 餐别、餐次（1早餐2午餐3晚餐4下午茶5宵夜
      mealType: getCurrentMealType(), // 当前餐别
      orderRemark: "", // 订单备注
      payType, // 支付方式（1余额2微信3支付宝4现金5套餐6刷卡(注意不是会员卡)7货到付款）
      buffetOrderItemEntityList: orderItems,
      businessId: businessId,
      // foodName: "",
      knCustomerInformationId: memberInfo?.customerInformationId,
      // foodAreaName: "", (?)
      orderType: 1, // orderType	订单类型（1自选订单2周期订单3日照点餐订单）
      dcsource: 8, // 	下单方式（1商家app2小程序4家庭版app5送餐人员app、6电话下单 7日照PC端8消费机）
      orderStatus: 3, // （策划需求：消费机涉及叫号，自动出餐）	订单状态（1未出单2已出单、未领 3已领餐、4已送达5逾期6退单7已评论8已派单9待派单10已取消）
      isUse: "2", // 是否使用餐补(1是 2否)
      payStatus: "0", // 	支付状态（0未支付 1已支付）
      packingFee: 0, // 包装费
      distributionFee: 0, // 	配送费
      serialNumber: generateSerialNumber(), // 前端自建流水号
      // ------------------------
      // 将特殊参数或需要覆盖参数合并到参数中
      ...specialParam,
      // --------------------------
    };
    const { data, success, msg } = await pcSave(pam);
    if (!success && data) throw new Error(msg || "下单失败");
    // 下单成功后，执行支付逻辑
    return { data, success: true, msg };
  } catch (error) {
    console.error(error);
    return { data: error, success: false, msg: error.message || "下单失败" };
  }
};

// 提取重复代码块到单独的函数中
const getMembershipCardPayType = (cardType: number) => {
  if (cardType == 1) {
    return 1;
  } else if (cardType == 2) {
    return 5;
  }
};

// 计算 payType (接口字段)
// 支付方式（1余额2微信3支付宝4现金5套餐6刷卡(注意不是会员卡)7货到付款）
export const calcPayType = (cardInfo = {}, uiPayType: string | number) => {
  console.log("calcPayType >> uiPayType && cardInfo", { uiPayType, cardInfo });
  if (uiPayType == "card") {
    // 再判断卡类型为 1 则是会员卡余额支付， 2 则是套餐支付
    if (cardInfo.membershipCardType == 1) {
      return 1;
    } else if (cardInfo.membershipCardType == 2) {
      return 5;
    }
  } else if (uiPayType == "scan") {
    return 2;
  } else if (uiPayType == "cash") {
    return 4;
  } else {
    // 再判断卡类型为 1 则是会员卡余额支付， 2 则是套餐支付
    return getMembershipCardPayType(cardInfo.membershipCardType);
  }
};
